// 主题工具函数 - 处理不同图表类型的主题变量映射

/**
 * 图表类型到主题变量的映射表
 * 为每种Mermaid图表类型定义了特定的主题变量
 */
export const chartTypeThemeVariables = {
  // 流程图特定变量
  flowchart: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'fill',             // 节点填充颜色
      'stroke',           // 节点边框颜色
      'textColor',        // 文本颜色
      'lineColor',        // 连接线颜色
      'defaultLinkColor', // 默认链接颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor',   // 次要颜色
      'tertiaryColor',    // 第三颜色
      'clusterBkg'        // 集群背景颜色
    ],
    labels: {
      primaryColor: '主节点填充色',
      primaryTextColor: '主节点文本色',
      primaryBorderColor: '主节点边框色',
      fill: '普通节点填充色',
      stroke: '普通节点边框色',
      textColor: '普通节点文本色',
      lineColor: '主要连接线色',
      defaultLinkColor: '默认连接线色',
      backgroundColor: '背景颜色',
      secondaryColor: '次要颜色',
      tertiaryColor: '第三颜色',
      clusterBkg: '集群背景色'
    }
  },
  
  // 时序图特定变量
  sequenceDiagram: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'actorBorder',      // 参与者边框颜色
      'actorBkg',         // 参与者背景颜色
      'actorTextColor',   // 参与者文本颜色
      'textColor',        // 文本颜色
      'lineColor',        // 线条颜色
      'messageTextColor', // 消息文本颜色
      'arrowColor',       // 箭头颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor',   // 次要颜色（用于Note等）
      'noteBorderColor',  // 注释边框颜色
      'noteTextColor'     // 注释文本颜色
    ],
    labels: {
      primaryColor: '主色调',
      primaryTextColor: '主要文本色',
      primaryBorderColor: '边框颜色',
      actorBorder: '参与者边框色',
      actorBkg: '参与者背景色',
      actorTextColor: '参与者文本色',
      textColor: '普通文本色',
      lineColor: '生命线颜色',
      messageTextColor: '消息文本色',
      arrowColor: '箭头颜色',
      backgroundColor: '背景颜色',
      secondaryColor: '注释背景色',
      noteBorderColor: '注释边框色',
      noteTextColor: '注释文本色'
    }
  },
  
  // 类图特定变量
  classDiagram: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'fill',             // 类框填充颜色
      'stroke',           // 类框边框颜色
      'textColor',        // 文本颜色
      'lineColor',        // 连接线颜色
      'arrowColor',       // 箭头颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor',   // 次要颜色
      'tertiaryColor'     // 第三颜色
    ],
    labels: {
      primaryColor: '主色调',
      primaryTextColor: '主要文本色',
      primaryBorderColor: '主边框色',
      fill: '类框填充色',
      stroke: '类框边框色',
      textColor: '普通文本色',
      lineColor: '连接线颜色',
      arrowColor: '箭头颜色',
      backgroundColor: '背景颜色',
      secondaryColor: '次要颜色',
      tertiaryColor: '第三颜色'
    }
  },
  
  // 甘特图特定变量
  gantt: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'textColor',        // 文本颜色
      'lineColor',        // 线条颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor',   // 次要颜色
      'sectionBkgColor',  // 章节背景颜色
      'altSectionBkgColor' // 交替章节背景颜色
    ],
    labels: {
      primaryColor: '主任务颜色',
      primaryTextColor: '主任务文本色',
      primaryBorderColor: '边框颜色',
      textColor: '普通文本色',
      lineColor: '线条颜色',
      backgroundColor: '背景颜色',
      secondaryColor: '次要任务颜色',
      sectionBkgColor: '章节背景色',
      altSectionBkgColor: '交替章节背景色'
    }
  },
  
  // 饼图特定变量
  pie: {
    variables: [
      'primaryColor',     // 主要颜色（第一个扇区）
      'primaryTextColor', // 主要文本颜色
      'textColor',        // 文本颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor',   // 次要颜色（第二个扇区）
      'tertiaryColor'     // 第三颜色（第三个扇区）
    ],
    labels: {
      primaryColor: '第一个扇区颜色',
      primaryTextColor: '标题文本色',
      textColor: '标签文本色',
      backgroundColor: '背景颜色',
      secondaryColor: '第二个扇区颜色',
      tertiaryColor: '第三个扇区颜色'
    }
  },
  
  // ER图特定变量
  erDiagram: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'fill',             // 实体填充颜色
      'stroke',           // 实体边框颜色
      'textColor',        // 文本颜色
      'lineColor',        // 关系线颜色
      'arrowColor',       // 箭头颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor'    // 次要颜色
    ],
    labels: {
      primaryColor: '实体填充色',
      primaryTextColor: '主要文本色',
      primaryBorderColor: '实体边框色',
      fill: '属性框填充色',
      stroke: '属性框边框色',
      textColor: '普通文本色',
      lineColor: '关系线颜色',
      arrowColor: '关系箭头色',
      backgroundColor: '背景颜色',
      secondaryColor: '次要颜色'
    }
  },
  
  // 状态图特定变量
  stateDiagram: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'fill',             // 状态框填充颜色
      'stroke',           // 状态框边框颜色
      'textColor',        // 文本颜色
      'lineColor',        // 连接线颜色
      'arrowColor',       // 箭头颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor',   // 次要颜色
      'tertiaryColor'     // 第三颜色
    ],
    labels: {
      primaryColor: '初始状态填充色',
      primaryTextColor: '主要文本色',
      primaryBorderColor: '状态边框色',
      fill: '普通状态填充色',
      stroke: '普通状态边框色',
      textColor: '普通文本色',
      lineColor: '连接线颜色',
      arrowColor: '箭头颜色',
      backgroundColor: '背景颜色',
      secondaryColor: '次要颜色',
      tertiaryColor: '第三颜色'
    }
  },
  
  // 默认通用变量，适用于不明确的图表类型
  default: {
    variables: [
      'primaryColor',     // 主要颜色
      'primaryTextColor', // 主要文本颜色
      'primaryBorderColor', // 主要边框颜色
      'textColor',        // 文本颜色
      'lineColor',        // 线条颜色
      'backgroundColor',  // 背景颜色
      'secondaryColor'    // 次要颜色
    ],
    labels: {
      primaryColor: '主色调',
      primaryTextColor: '主要文本色',
      primaryBorderColor: '边框颜色',
      textColor: '普通文本色',
      lineColor: '线条颜色',
      backgroundColor: '背景颜色',
      secondaryColor: '次要颜色'
    }
  }
};

/**
 * 从Mermaid代码中检测图表类型
 * @param {string} code - Mermaid代码
 * @returns {string} - 图表类型，如'flowchart', 'sequenceDiagram'等
 */
export function detectChartType(code) {
  // 清理代码并提取第一行
  const cleanedCode = code.trim();
  const firstLine = cleanedCode.split('\n')[0].trim();
  
  // 支持的图表类型关键词
  const chartTypes = [
    'flowchart', 'graph', 'sequenceDiagram', 'classDiagram', 
    'gantt', 'pie', 'erDiagram', 'stateDiagram-v2', 'stateDiagram',
    'journey', 'requirementDiagram', 'C4Context', 'gitGraph', 'mindmap'
  ];
  
  // 检查第一行是否包含图表类型关键词
  for (const type of chartTypes) {
    if (firstLine.toLowerCase().startsWith(type.toLowerCase())) {
      // 处理特殊情况，如stateDiagram-v2应简化为stateDiagram
      if (type === 'stateDiagram-v2') return 'stateDiagram';
      if (type === 'graph') return 'flowchart'; // graph是flowchart的别名
      return type;
    }
  }
  
  // 如果没有识别出特定类型，返回default
  return 'default';
}

/**
 * 获取指定图表类型的主题变量列表
 * @param {string} chartType - 图表类型
 * @returns {Array} - 主题变量列表
 */
export function getThemeVariablesByChartType(chartType) {
  if (chartTypeThemeVariables[chartType]) {
    return chartTypeThemeVariables[chartType].variables;
  }
  return chartTypeThemeVariables.default.variables;
}

/**
 * 获取指定图表类型的主题变量标签映射
 * @param {string} chartType - 图表类型
 * @returns {Object} - 主题变量标签映射
 */
export function getThemeVariableLabelsByChartType(chartType) {
  if (chartTypeThemeVariables[chartType]) {
    return chartTypeThemeVariables[chartType].labels;
  }
  return chartTypeThemeVariables.default.labels;
}